package 幂和对数.幂2;

import java.math.BigDecimal;

/**
 * TODO
 *
 * @className: m2
 * @description: TODO
 * @author: 等什么柠檬君
 * @date: 2022-04-27 16:45
 **/
public class m2 {

    /**
     * 给你一个整数 n，请你判断该整数是否是 2 的幂次方。如果是，返回 true ；否则，返回 false 。
     *
     * 如果存在一个整数 x 使得 n == 2x ，则认为 n 是 2 的幂次方。
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/power-of-two
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     *
     * java中 Math.log(n)是以e为底的  需要使用换底公式
     * 如果不使用位运算 此题需要注意精度丢失问题
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(isPowerOfTwo(536870912));
        System.out.println(isPowerOfTwo(16));
        System.out.println(isPowerOfTwo(3));
    }

    public static boolean isPowerOfTwo(int n) {
        return n > 0 && Math.pow(2,(float)(Math.log(n)/Math.log(2)))==n;
    }
}
